/**
 * 
 */

var BaseJs = {
	uploadForm : function(form, successMethod) {
		var data = this.getFormData(form);
		var method = $(form).attr("method");
		var action = $(form).attr("action");

		$.ajax({
			url : action,
			type : method,
			contentType : 'multipart/form-data; boundary=----WebKitFormBoundaryaqFKci2EgRMAALIS',
			dataType : 'json',
			data : data,
			error : function(XMLHttpRequest, textStatus, errorThrown) {
				alert("获取数据出错 ajax" + XMLHttpRequest.status + XMLHttpRequest.readyState + textStatus);
			},
			success : successMethod

		});

	},
	getFormData : function(form){
		var data = new Object();
		$(form).find(":input[name]").each(function(e) {
			var item = $(this);
			console.log(item);
			if (item.val()) {
				data[$(this).attr('name')] = $(this).val();
			}
			$(this).tooltip("destroy");
		});
		return data;
		
	},
	// 提交表单，除去所有空的元素
	submitForm : function(form, successMethod) {


		var method = $(form).attr("method");
		var action = $(form).attr("action");
		var data = this.getFormData(form);
		ExceptionHandler.eObject = form;
		this.ajax(action, data, successMethod);
	},// 提交form参数并且修改grid的数据
	formChangeGrid : function(form, grid) {
		this.submitForm(form, function(rData) {
			$(grid).datagrid({
				data : rData.data
			});
		});
	},
	setFormByData : function(form, data) {
		$(form).form('load', data);

	},
	setFormByUrl : function(form, params) {
		var url = $(form).attr('loadAction');
		var sparams = jQuery.param(params);
		$(form).form('load', url + "?" + sparams);
	},
	ajax : function(url, params, successMethod, method) {
		if (method == undefined)
			method = "POST";

		function success(rData) {
			if (rData.success) {
				if (successMethod != null)
					successMethod(rData);
				// 如果有成功提示则输出
				if (rData.msg != null)
					alert(rData.msg);
			} else {
				ExceptionHandler.handle(rData);
			}
		}

		$.ajax({
			url : url,
			type : method,
			dataType : 'json',
			data : params,
			error : function(XMLHttpRequest, textStatus, errorThrown) {
				alert("获取数据出错 ajax" + XMLHttpRequest.status + XMLHttpRequest.readyState + textStatus);
			},
			success : success

		});
	},

	getCookie : function(cookie_name) {
		var allcookies = document.cookie;
		var cookie_pos = allcookies.indexOf(cookie_name); // 索引的长度

		// 如果找到了索引，就代表cookie存在，
		// 反之，就说明不存在。
		if (cookie_pos != -1) {
			// 把cookie_pos放在值的开始，只要给值加1即可。
			cookie_pos += cookie_name.length + 1; // 这里容易出问题，所以请大家参考的时候自己好好研究一下
			var cookie_end = allcookies.indexOf(";", cookie_pos);

			if (cookie_end == -1) {
				cookie_end = allcookies.length;
			}

			var value = unescape(allcookies.substring(cookie_pos, cookie_end)); // 这里就可以得到你想要的cookie的值了。。。
		}
		return value;
	},

	clearCookie : function() {
		var keys = document.cookie.match(/[^ =;]+(?=\=)/g);
		if (keys) {
			for (var i = keys.length; i--;)
				document.cookie = keys[i] + '=0;expires=' + new Date(0).toUTCString()
		}
	},

	// 获取url参数
	getQueryString : function(name) {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
		var r = window.location.search.substr(1).match(reg);
		if (r != null)
			return unescape(r[2]);
		return null;
	}
};

var ExceptionHandler = {
	eObject : null,
	inputBorderColor : "#95B8E7",
	inputBackgroundColor : "#FFFFFF",
	clearFormException : function(form) {
		$(this.eObject).find(":input[name='" + i + "']").each(function() {
			$(this).prev().parent().css("borderColor", this.inputBorderColor);
			$(this).prev().css("backgroundColor", this.inputBackgroundColor);
			var tipdiv = $(this).parent();
			tipdiv.tooltip("destroy");
		});
	},
	handle : function(e) {
		switch (e.errorType) {
		case 0:
			this.commonException(e.error);
			break;
		case 1:
			this.unknowException(e.error);
			break;
		case 2:
			this.formException(e.error);
			break;
		}

	},
	unknowException : function(e) {
		alert("未知错误");
	},
	commonException : function(e) {
		alert(e);
	},
	formException : function(e) {

		for (i in e) {
			$(this.eObject).find(":input[name='" + i + "']").each(function() {
				var tipdiv = $(this).parent();
				// 设置提示的提示框更好看一点
				tipdiv.tooltip({
					position : 'right',
					content : e[i],
					color : "#000",
					onShow : function() {
						var t = $(this);
						t.tooltip('tip').css({
							borderColor : "#CC9933",
							backgroundColor : "#FFFFCC"
						});

					}
				});
				var thisobj = $(this);

				$(tipdiv).prev().textbox({
					onChange : function(newValue, oldValue) {
						// 当input改变的时候需要把红色的提示删除掉并变成原来的颜色
						thisobj.prev().parent().css("borderColor", "#95B8E7");
						thisobj.prev().css("backgroundColor", "#FFFFFF");
						tipdiv.tooltip("destroy");
					}
				});
				// 遇到错误把对应的form的input边红色
				thisobj.prev().parent().css("borderColor", '#FFAFAF');
				thisobj.prev().css("backgroundColor", '#FFF3F3');

				tipdiv.tooltip('show');
			});
		}

	}
};
